Don't let the 'B' interactive spec default to buffers viewed in
authorJim Blandy <jimb@redhat.com>
Thu, 17 Jun 1993 00:39:37 +0000 (00:39 +0000)
committerJim Blandy <jimb@redhat.com>
Thu, 17 Jun 1993 00:39:37 +0000 (00:39 +0000)
any visible frame.
* buffer.c (Fother_buffer): Pass Qvisible as the second argument
to Fget_buffer_window.
* window.c (Qvisible): New symbol.
(window_loop): In GET_BUFFER_WINDOW case, if frames is Qvisible,
ignore non-visible frames.
(Fget_buffer_window): Expand doc string to mention that Qvisible
is an interesting value for FRAME argument.
(syms_of_window): Init and staticpro Qvisible.
* lisp.h (Qvisible): New declaration.

src/buffer.c
src/lisp.h
src/window.c

index b19cfcaa737da03bc809633beef3d9ae9e4d7693..f2d6ca37e74c4e0c9ea1d843f4e0e26752ab1bc8 100644 (file)
@@ -585,7 +585,7 @@ If BUFFER is omitted or nil, some interesting buffer is returned.")
       if (XSTRING (XBUFFER (buf)->name)->data[0] == ' ')
        continue;
       if (NILP (visible_ok))
-       tem = Fget_buffer_window (buf, Qnil);
+       tem = Fget_buffer_window (buf, Qvisible);
       else
        tem = Qnil;
       if (NILP (tem))
index 7acf63d6be9f8ecec0de9f3f8c0d3e1f45577ad4..0969bfb8f413a8b88bfcc333085e5b35576616d9 100644 (file)
@@ -1213,7 +1213,7 @@ extern Lisp_Object get_keyelt (), get_keymap();
 extern Lisp_Object Fvertical_motion (), Findent_to (), Fcurrent_column ();
 
 /* defined in window.c */
-extern Lisp_Object Qwindowp, Qwindow_live_p;
+extern Lisp_Object Qwindowp, Qwindow_live_p, Qvisible;
 extern Lisp_Object Fget_buffer_window ();
 extern Lisp_Object Fsave_window_excursion ();
 extern Lisp_Object Fset_window_configuration (), Fcurrent_window_configuration ();
index d7e91560d7cc1e2aea940327f1a6d7a8b7ef177e..4c182a6924d273467bba621b0024698420ab225d 100644 (file)
@@ -30,6 +30,7 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
 #include "keyboard.h"
 
 Lisp_Object Qwindowp, Qwindow_live_p;
+Lisp_Object Qvisible;
 
 Lisp_Object Fnext_window (), Fdelete_window (), Fselect_window ();
 Lisp_Object Fset_window_buffer (), Fsplit_window (), Frecenter ();
@@ -1057,8 +1058,10 @@ argument ALL_FRAMES is non-nil, cycle through all frames.")
 \f
 /* Look at all windows, performing an operation specified by TYPE
    with argument OBJ.
-   If FRAMES is Qt, look at all frames, if Qnil, look at just the selected
-   frame.  If FRAMES is a frame, just look at windows on that frame.
+   If FRAMES is Qt, look at all frames;
+                Qvisible, look at visible frames (GET_BUFFER_WINDOW only);
+                Qnil, look at just the selected frame;
+               a frame, just look at windows on that frame.
    If MINI is non-zero, perform the operation on minibuffer windows too.
 */
 
@@ -1126,6 +1129,8 @@ window_loop (type, obj, mini, frames)
   best_window = Qnil;
   for (;;)
     {
+      FRAME_PTR w_frame = XFRAME (WINDOW_FRAME (XWINDOW (w)));
+
       /* Pick the next window now, since some operations will delete
         the current window.  */
 #ifdef MULTI_FRAME
@@ -1137,17 +1142,16 @@ window_loop (type, obj, mini, frames)
           Or we know this isn't a MULTI_FRAME Emacs, so who cares?  */
        next_window = Fnext_window (w, mini ? Qt : Qnil, Qt);
 
-      if (!MINI_WINDOW_P (XWINDOW (w))
+      if (! MINI_WINDOW_P (XWINDOW (w))
          || (mini && minibuf_level > 0))
        switch (type)
          {
          case GET_BUFFER_WINDOW:
-#if 0
-           /* Ignore invisible and iconified frames.  */
-           if (! FRAME_VISIBLE_P (XFRAME (WINDOW_FRAME (XWINDOW (w))))
-               || FRAME_ICONIFIED_P (XFRAME (WINDOW_FRAME (XWINDOW (w)))))
+           /* Perhaps ignore invisible and iconified frames.  */
+           if (EQ (frames, Qvisible)
+               && (! FRAME_VISIBLE_P (w_frame)
+                   || FRAME_ICONIFIED_P (w_frame)))
              break;
-#endif
            if (XBUFFER (XWINDOW (w)->buffer) == XBUFFER (obj))
              return w;
            break;
@@ -1272,8 +1276,9 @@ frame, search only that frame.\n")
 
 DEFUN ("get-buffer-window", Fget_buffer_window, Sget_buffer_window, 1, 2, 0,
   "Return a window currently displaying BUFFER, or nil if none.\n\
-If optional argument FRAMES is t, search all frames.  If FRAME is a\n\
-frame, search only that frame.\n")
+If optional argument FRAME is t, search all frames.\n\
+If FRAME is `visible', search all visible frames.\n\
+If FRAME is a frame, search only that frame.\n")
   (buffer, frame)
     Lisp_Object buffer, frame;
 {
@@ -2896,6 +2901,9 @@ syms_of_window ()
   Qwindow_live_p = intern ("window-live-p");
   staticpro (&Qwindow_live_p);
 
+  Qvisible = intern ("Qvisible");
+  staticpro (&Qvisible);
+
 #ifndef MULTI_FRAME
   /* Make sure all windows get marked */
   staticpro (&minibuf_window);